# 1-导包
import requests
from api.api_register_login import ApiRegisterLogin
from api.api_approve_trust import ApiApproveTrust
from api.api_risk_tender import ApiRiskTender
from common.bs_util import html_parser
from api import log
import traceback
from common.db_util import clear_data


# 2-定义一个投资业务脚本类
class Test04TenderBusiness:

    @classmethod
    def setup_class(cls):
        # 清除测试数据
        clear_data()
    # 提示：必须在test01_xxxx.py中类⽅法中调⽤【类级别初始化，每个类文件只执行一次；setup是函数级别，每个测试方法都运行一次】

    # 测试准备
    def setup(self):
        # 1-初始化会话
        self.session = requests.Session()
        # 2、获取认证充值封装对象
        self.approve = ApiApproveTrust(self.session)
        # 获取ApiRiskTender实例
        self.tender = ApiRiskTender(self.session)
        # 3、获取登录注册封装对象
        self.register = ApiRegisterLogin(self.session)

    # 结束清理
    def teardown(self):
        # 关闭会话
        self.session.close()

    # 投资业务实现方法
    def test_01_tender_business(self):
        # 初始化请求参数
        phone = 13800000002
        imgVerifyCode = 8888
        password = "test123"
        phone_code = 666666
        realname = "张三"
        card_id = 350781196403077680

        try:
            # 1-调用获取图片验证码接口 测试
            self.register.api_img_code()
            # 2-调用获取短信验证码 测试
            self.register.api_phone_code(phone=phone, imgVerifyCode=imgVerifyCode)
            # 3-调用注册接口 测试
            self.register.api_register(phone=phone, password=password, verifycode=imgVerifyCode, phone_code=phone_code)
            # 4-调用登录接口 测试
            self.register.api_login(keywords=phone, password=password)
            # 5-调用认证接口 测试
            self.approve.api_approve(realname=realname, card_id=card_id)
            # 6-调用后台开户接口 测试
            res = self.approve.api_trust()
            # 7-调用三方开户接口 测试
            html = res.json()["description"]["form"]  # 从接口响应的json文件中提取html数据
            result = html_parser(html=html)
            res = self.session.post(url=result[0], data=result[1])
            assert "OK" in res.text
            # 8-调用获取图片验证码（充值）接口 测试
            self.approve.api_img_code()
            # 9-调用后台充值接口 测试
            res = self.approve.api_recharge()
            # 10-调用三方充值接口 测试
            html = res.json()["description"]["form"]  # 从接口响应的json文件中提取html数据
            result = html_parser(html=html)
            res = self.session.post(url=result[0], data=result[1])
            assert "OK" in res.text
            # 11-调用风险评估接口 测试
            self.tender.api_risk()
            # 12-调用请求后台投资接口 测试
            res = self.tender.api_tender(amount=100)
            # 13-调用三方投资接口 测试
            html = res.json()["description"]["form"]  # 从接口响应的json文件中提取html数据
            result = html_parser(html=html)
            res = self.session.post(url=result[0], data=result[1])
            assert "OK" in res.text
            log.info("投资业务13个接口测试大获全胜，非常牛逼！")
        except Exception as e:
            # 记录异常日志
            log.error("投资业务测试出现异常：{}".format(traceback.format_exc()))
            # 抛出异常
            raise
